package main

import (
	"fmt"
)

/*
给你一个01字符串，定义答案=该串中最长的连续1的长度，现在你有至多K次机会，每次机会可以将串中的某个0改成1，现在问最大的可能答案
输入描述:
输入第一行两个整数N,K，表示字符串长度和机会次数
第二行输入N个整数，表示该字符串的元素
( 1 <= N <= 300000, 0 <= K <= N )

输出描述:
输出一行表示答案
输入例子1:
10 2
1 0 0 1 0 1 0 1 0 1
输出例子1:
5
 */

func helper() {
	var n, k int
	fmt.Scanf("%d %d", &n, &k)
	arr := make([]int, n)
	for i := range arr {
		fmt.Scanf("%d", &arr[i])
	}
	max := func(x, y int) int {
		if x > y {
			return x
		}else {
			return y
		}
	}
	left, maxNum := 0, 0
	for i := 0; i < n; i ++ {
		if arr[i] == 0 {
			k --
			for k < 0 {
				if arr[left] == 0 {
					k ++
				}
				left ++
			}
		}
		maxNum = max(i - left + 1, maxNum)
	}
	fmt.Println(maxNum)
}

func main() {
	helper()
}
